home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 4810 / 4810.xpi / chrome / speeddial.jar / content / multikeyWindow.js < prev    next >
Text File  |  2010-01-31  |  13KB  |  352 lines

  1. var MultiKey = {
  2.   initialNumber: 0,
  3.   numberThumbnails: 0,
  4.   numberDigits: 0,
  5.   ctrlPressed: false,
  6.   shiftPressed: false,
  7.   altPressed: false,
  8.   digitBox: null,
  9.   cancelledMultikey: false,
  10.   isClosing: false,
  11.   multikeyBundle: null,
  12.   targetAction: 0,
  13.   multikeySelectWhenComplete: false,
  14.   showingMultiKey: false,
  15.   initiatedFirefox3: false,
  16.  
  17.   Startup: function() {
  18.     /*
  19.     MultiKey.initialNumber = window.arguments[0];
  20.     MultiKey.numberThumbnails = window.arguments[1];
  21.     MultiKey.callbackFunction = window.arguments[2];
  22.     MultiKey.cancelCallbackFunction = window.arguments[3];
  23.     MultiKey.ctrlPressed = window.arguments[4];
  24.     MultiKey.shiftPressed = window.arguments[5];
  25.     MultiKey.altPressed = window.arguments[6];
  26.     var desiredWidth = window.arguments[7];
  27.     MultiKey.targetAction = window.arguments[8];
  28.     */
  29.     MultiKey.isClosing = false;
  30.     
  31.     if (MultiKey.multikeyBundle == null) {
  32.       MultiKey.multikeyBundle = document.getElementById("bundle_multikey");
  33.     }
  34.     
  35.     MultiKey.multikeySelectWhenComplete = SpeedDial.prefs.getBoolPref("multikeySelectWhenComplete");
  36.     
  37.     // Set size
  38.     var mainBox = document.getElementById("multikeyMainBox");
  39.     
  40.     // Set action label
  41.     var actionLabel = document.getElementById("multikeyAccessDialLabel");
  42.     if (MultiKey.targetAction == 1) {
  43.       actionLabel.setAttribute("value", MultiKey.multikeyBundle.getString("currentTab.label"));
  44.     } else if (MultiKey.targetAction == 2) {
  45.       actionLabel.setAttribute("value", MultiKey.multikeyBundle.getString("newTab.label"));
  46.     } else if (MultiKey.targetAction == 3) {
  47.       actionLabel.setAttribute("value", MultiKey.multikeyBundle.getString("backgroundTab.label"));
  48.     } else if (MultiKey.targetAction == 4) {
  49.       actionLabel.setAttribute("value", MultiKey.multikeyBundle.getString("newWindow.label"));
  50.     } else if (MultiKey.targetAction == 5) {
  51.       actionLabel.setAttribute("value", MultiKey.multikeyBundle.getString("saveDisk.label"));
  52.     }
  53.     
  54.     // Add digits
  55.     MultiKey.digitBox = document.getElementById("multikeyDigitBox");
  56.     
  57.     MultiKey.numberDigits = 0;
  58.     var currentNumber = MultiKey.numberThumbnails;
  59.     while (currentNumber > 0) {
  60.       MultiKey.numberDigits++;
  61.       currentNumber /= 10;
  62.       currentNumber = Math.floor(currentNumber);
  63.     }
  64.     
  65.     while (MultiKey.digitBox.firstChild) {
  66.       MultiKey.digitBox.removeChild(MultiKey.digitBox.firstChild);
  67.     }
  68.  
  69.     for (var c=MultiKey.numberDigits; c>0; c--) {
  70.       var newImage = document.createElement("image");
  71.       newImage.setAttribute("id", "multikeyDigit" + c);
  72.       newImage.setAttribute("class", "multikeyDigit");
  73.       if (c != 1) {
  74.         newImage.setAttribute("number", "?");
  75.       } else {
  76.         newImage.setAttribute("number", MultiKey.initialNumber);
  77.       }
  78.       MultiKey.digitBox.appendChild(newImage);
  79.     }
  80.     
  81.     MultiKey.updateCurrentDialData();
  82.     /*
  83.     addEventListener("keydown", function(event) { keyDownHandler(event); }, true);
  84.     addEventListener("keyup", function(event) { keyUpHandler(event); }, true);
  85.     addEventListener("blur", function(event) { blurHandler(event); }, false);
  86.     */
  87.   },
  88.  
  89.   Unload: function() {
  90.     if (!MultiKey.cancelledMultikey) {
  91.       SpeedDial.multikeyDialSelected(MultiKey.getCurrentNumber(), MultiKey.targetAction);
  92.     }
  93.   },
  94.   
  95.   show: function() {
  96.     var mainBox = document.getElementById("multikeyMainBox");
  97.     var mainSubBox = document.getElementById("multikeyMainSubBox");
  98.     var multikeyBackground = document.getElementById("speeddial-multikey-background");
  99.  
  100.     if (SpeedDial.isFirefox3) {
  101.       // "panel" only exists on Firefox 3
  102.       var targetPanel;
  103.       if (!MultiKey.initiatedFirefox3) {
  104.         mainBox.removeChild(mainSubBox);
  105.         
  106.         var targetPanel = document.createElement("panel");
  107.         targetPanel.setAttribute("id", "speeddial-multikey-panel");
  108.         
  109.         targetPanel.appendChild(mainSubBox);
  110.           
  111.         document.getElementById("mainPopupSet").appendChild(targetPanel);
  112.         MultiKey.initiatedFirefox3 = true;
  113.       } else {
  114.         targetPanel = document.getElementById("speeddial-multikey-panel");
  115.       }
  116.       var multiKeyWidth = Math.floor(window.innerWidth * SpeedDial.prefs.getIntPref("multikeyOverlayWidthModifier") / 100);
  117.       var multiKeyHeight = targetPanel.boxObject.height;
  118.       targetPanel.setAttribute("width", multiKeyWidth);
  119.       targetPanel.setAttribute("left", Math.floor((screen.availWidth - multiKeyWidth) / 2));
  120.       targetPanel.setAttribute("top", (screen.availHeight - multiKeyHeight) / 2);
  121.       targetPanel.openPopup(null, "", 0, 0, false, true);
  122.     } else {
  123.       mainBox.setAttribute("multikey-shown", true);
  124.       mainSubBox.style.width = mainBox.style.width  = window.innerWidth+'px';
  125.       mainSubBox.style.height = mainBox.style.height  = window.innerHeight+'px';
  126.    
  127.       multikeyBackground.style.width  = (window.innerWidth * 2)+'px';
  128.       multikeyBackground.style.height = (window.innerHeight * 2)+'px';
  129.       multikeyBackground.setAttribute("multikey-shown", true);
  130.     }
  131.     
  132.     MultiKey.showingMultiKey = true;
  133.     
  134.     MultiKey.Startup();
  135.   },
  136.   
  137.   hide: function() {
  138.     if (SpeedDial.isFirefox3) {
  139.       document.getElementById("speeddial-multikey-panel").hidePopup();
  140.     } else {
  141.       document.getElementById("multikeyMainBox").setAttribute("multikey-shown", false);
  142.       document.getElementById("speeddial-multikey-background").setAttribute("multikey-shown", false);
  143.     }
  144.  
  145.     MultiKey.showingMultiKey = false;
  146.  
  147.     MultiKey.Unload();
  148.   },
  149.  
  150.   updateCurrentDialData: function() {
  151.     var currentNumber = MultiKey.getCurrentNumber();
  152.     
  153.     if ((currentNumber < 1) || (currentNumber > MultiKey.numberThumbnails)) {
  154.       document.getElementById("multikeyCurrentDialLabel").setAttribute("value", SpeedDial.bundle.getString("outofrange.label"));
  155.       document.getElementById("multikeyCurrentDialIcon").removeAttribute("src");
  156.       document.getElementById("multikeyCurrentDialURL").setAttribute("value", " ");
  157.     } else if (SpeedDial.prefs.prefHasUserValue("thumbnail-" + currentNumber + "-url")) {
  158.       var title = SpeedDial.prefs.getComplexValue("thumbnail-" + currentNumber + "-label", Components.interfaces.nsISupportsString).data;
  159.       if (title == "") {
  160.         document.getElementById("multikeyCurrentDialLabel").setAttribute("value", SpeedDial.bundle.getString("untitled.label"));
  161.       } else {
  162.         document.getElementById("multikeyCurrentDialLabel").setAttribute("value", title);
  163.       }
  164.       var thumbnailIcon = "";
  165.       if (SpeedDial.isFirefox3) {
  166.         thumbnailIcon = SpeedDialUtils.getDialIcon(currentNumber);
  167.       } else {
  168.         if (SpeedDial.prefs.prefHasUserValue("thumbnail-" + currentNumber + "-icon")) {
  169.           thumbnailIcon =  SpeedDial.prefs.getCharPref("thumbnail-" + currentNumber + "-icon");
  170.           if (thumbnailIcon == "data:") {
  171.             thumbnailIcon = "";
  172.           }
  173.         }
  174.       }
  175.       document.getElementById("multikeyCurrentDialIcon").setAttribute("src", thumbnailIcon);
  176.       
  177.       document.getElementById("multikeyCurrentDialURL").setAttribute("value", SpeedDial.prefs.getCharPref("thumbnail-" + currentNumber + "-url"));
  178.     } else {
  179.       document.getElementById("multikeyCurrentDialLabel").setAttribute("value", SpeedDial.bundle.getString("unassigned.label"));
  180.       document.getElementById("multikeyCurrentDialIcon").removeAttribute("src");
  181.       document.getElementById("multikeyCurrentDialURL").setAttribute("value", " ");
  182.     }
  183.   },
  184.  
  185.   keyDownHandler: function(event) {
  186.     var processed = false;
  187.     
  188.     if (event.keyCode == 16) {
  189.       MultiKey.shiftPressed = true;
  190.       processed = true;
  191.     } else if (event.keyCode == 17) {
  192.       MultiKey.ctrlPressed = true;
  193.       processed = true;
  194.     } else if ((event.keyCode == 18) || (event.keyCode == 224)) {  // Alt or Apple key
  195.       MultiKey.altPressed = true;
  196.       processed = true;
  197.     } else if (event.keyCode == 13) { // Enter
  198.       MultiKey.isClosing = true;
  199.       MultiKey.hide();
  200.       processed = true;
  201.     } else if (event.keyCode == 8) { // Backspace
  202.       MultiKey.processBackspace();
  203.       processed = true;
  204.     } else if (event.keyCode == 27) { // Escape
  205.       MultiKey.cancelDialog();
  206.       processed = true;
  207.     } else if ((event.keyCode == 37) || (event.keyCode == 38) || (event.keyCode == 109)) { // Cursor up, left, and minus
  208.       MultiKey.goPreviousDial();
  209.       processed = true;
  210.     } else if ((event.keyCode == 39) || (event.keyCode == 40) || (event.keyCode == 61)) { // Cursor down, right, and plus
  211.       MultiKey.goNextDial();
  212.       processed = true;
  213.     }
  214.  
  215.     if (processed == true) {
  216.       event.preventDefault();
  217.       event.preventBubble();
  218.       event.preventCapture();
  219.       event.stopPropagation();
  220.     }
  221.   },
  222.  
  223.   keyUpHandler: function (event) {
  224.     var processed = false;
  225.     if (event.keyCode == 16) {
  226.       processed = true;
  227.       MultiKey.shiftPressed = false;
  228.     } else if (event.keyCode == 17) {
  229.       processed = true;
  230.       MultiKey.ctrlPressed = false;
  231.     } else if ((event.keyCode == 18) || (event.keyCode == 224)) {
  232.       processed = true;
  233.       MultiKey.altPressed = false;
  234.     } else if ((event.keyCode == 13) || (event.keyCode == 8) || (event.keyCode == 27) ||(event.keyCode == 37) || (event.keyCode == 38) || (event.keyCode == 109) || (event.keyCode == 39) || (event.keyCode == 40) || (event.keyCode == 61)) {
  235.       processed = true;
  236.     }
  237.     if (!MultiKey.ctrlPressed && !MultiKey.shiftPressed && !MultiKey.altPressed) {
  238.       MultiKey.isClosing = true;
  239.       MultiKey.hide();
  240.     } else if (processed) {
  241.       event.preventDefault();
  242.       event.preventBubble();
  243.       event.preventCapture();
  244.       event.stopPropagation();
  245.     }
  246.   },
  247.  
  248.   processKey: function (event, typedNumber) {
  249.     var firstDigit = document.getElementById("multikeyDigit" + MultiKey.numberDigits);
  250.     
  251.     for (var c=MultiKey.numberDigits; c>1; c--) {
  252.       document.getElementById("multikeyDigit" + c).setAttribute("number", document.getElementById("multikeyDigit" + (c - 1)).getAttribute("number"));
  253.     }
  254.     
  255.     // Set last digit
  256.     document.getElementById("multikeyDigit1").setAttribute("number", typedNumber);
  257.     
  258.     MultiKey.updateCurrentDialData();
  259.     
  260.     if ((firstDigit.getAttribute("number") != "?") && (MultiKey.multikeySelectWhenComplete)) {
  261.       // Completed! Process
  262.       MultiKey.isClosing = true;
  263.       MultiKey.hide();
  264.     }
  265.     
  266.     event.preventDefault();
  267.     event.preventBubble();
  268.     event.preventCapture();
  269.     event.stopPropagation();
  270.   },
  271.  
  272.   processBackspace: function () {
  273.     for (var c=1; c<=MultiKey.numberDigits; c++) {
  274.       if (c<MultiKey.numberDigits) {
  275.         document.getElementById("multikeyDigit" + c).setAttribute("number", document.getElementById("multikeyDigit" + (c + 1)).getAttribute("number"));
  276.       } else {
  277.         document.getElementById("multikeyDigit" + c).setAttribute("number", "?");
  278.       }
  279.     }
  280.     MultiKey.updateCurrentDialData();
  281.   },
  282.  
  283.   goPreviousDial: function () {
  284.     var currentNumber = MultiKey.getCurrentNumber();
  285.     var originalNumber = currentNumber;
  286.     do {
  287.       currentNumber--;
  288.       if (currentNumber < 1) {
  289.         currentNumber = MultiKey.numberThumbnails;
  290.       }
  291.     } while ((currentNumber != originalNumber) && !SpeedDial.prefs.prefHasUserValue("thumbnail-" + currentNumber + "-url"));
  292.   
  293.     if (currentNumber != originalNumber) {
  294.       MultiKey.setCurrentNumber(currentNumber);
  295.     }
  296.   },
  297.  
  298.   goNextDial: function () {
  299.     var currentNumber = MultiKey.getCurrentNumber();
  300.     var originalNumber = currentNumber;
  301.     do {
  302.       currentNumber++;
  303.       if (currentNumber > MultiKey.numberThumbnails) {
  304.         currentNumber = 1;
  305.       }
  306.     } while ((currentNumber != originalNumber) && !SpeedDial.prefs.prefHasUserValue("thumbnail-" + currentNumber + "-url"));
  307.     
  308.     if (currentNumber != originalNumber) {
  309.       MultiKey.setCurrentNumber(currentNumber);
  310.     }
  311.   },
  312.  
  313.   setCurrentNumber: function (currentNumber) {
  314.     for (var c=1; c<=MultiKey.numberDigits; c++) {
  315.       var currentDigit = document.getElementById("multikeyDigit" + c);
  316.       if (currentNumber > 0) {
  317.         currentDigit.setAttribute("number", parseInt(currentNumber % 10));
  318.         currentNumber = Math.floor(currentNumber / 10);
  319.       } else {
  320.         currentDigit.setAttribute("number", "?");
  321.       }
  322.     }
  323.     MultiKey.updateCurrentDialData();
  324.   },
  325.  
  326.   getCurrentNumber: function () {
  327.     var currentModifier = 1;
  328.     var currentValue = 0;
  329.     
  330.     for (var c=1; c<=MultiKey.numberDigits; c++) {
  331.       var digitValue = document.getElementById("multikeyDigit" + c).getAttribute("number");
  332.       if (digitValue != "?") {
  333.         currentValue += parseInt(digitValue) * currentModifier;
  334.       }
  335.       currentModifier *= 10;
  336.     }
  337.     
  338.     return currentValue;
  339.   },
  340.  
  341.   cancelDialog: function () {
  342.     if (!MultiKey.isClosing) {
  343.       MultiKey.cancelledMultikey = true;
  344.       MultiKey.isClosing = true;
  345.       MultiKey.hide();
  346.     }
  347.   },
  348.  
  349.   blurHandler: function (event) {
  350.     MultiKey.cancelDialog();
  351.   }
  352. }